1. Field of the Invention
The present invention is related to the field of computer systems, and more particularly, to prefetching data from memory locations.
2. Description of the Related Art
Prefetching is a technique commonly implemented in processors. Data and instructions required by a processor are prefetched before it is actually utilized by the processor's core execution unit (EU). As a result of prefetching, the prefetched data is available to the EU at the relatively higher data rates of the processor's internal bus. A hardware prefetch engine (HWP) in a processor normally prefetches the data required by the EU. Since the prefetched data and instructions (data) are available whenever the EU requires it, prefetching generally improves the processor's overall performance.
However, if prefetching is implemented incorrectly, prefetching may impair a processor or system's performance. In order to prefetch data and/or instructions, e.g., from external memory, the external memory bus is used. Hence, prefetching may occupy the resources of the external memory bus, thus reducing the effective bandwidth of the external memory bus. The data/instructions that are prefetched may be stored in cache memory that is close to the processor(s). For added efficiency, multiple levels of cache memory may be used. However, due to the limited size of the cache memory, prefetching of new data/instructions may overwrite previously-fetched data/instructions that are still needed.
In a typical processor, an entire cache line may be prefetched. For example, if a cache line consists of 32 bytes, and if a miss occurs in the cache, then 32 bytes at a time may be prefetched from external memory and stored in the cache. If multiple misses occur in the same cache line, the HWP may prefetch the same entire cache line multiple times. This method of prefetching is redundant and inefficient.